2025-11-21
Выполнить второй раздел внешнего курса “Системный администратор Linux с нуля”.
Задания четвертого, пятого, шестого и седьмого модулей, а также тесты.
Рисунок 1: модуль 4
Используес man чтобы узнать, как работает команда grep.
Рисунок 2: модуль 4
Находим документацию о systemctl с помощью info.
Рисунок 3: модуль 4
Откройте локальную документацию о info.
Открываем файл /etc/os-release с помощью less и находим название дистрибутива.
Рисунок 5: модуль 4
Исопльзуем grep, чтобы найти строки, содержащие «error» в файле /var/log/syslog.
Рисунок 6: модуль 4
Отредактируем конфигурацию SSH с помощью nano или vim и изменяем параметр PermitRootLogin no.
Рисунок 7: модуль 4
Создаем небольшой файл с матрицей чисел произвольного размера, и поэкспериментируем с числами при помощи утилиты awk — например, посчитаем сумму чисел в каждой четной строке.
Рисунок 8: модуль 4
Находим все ошибки в системном журнале за последний день.
Рисунок 9: модуль 4
Проверяем логи SSH и находим неудачные попытки входа.
Рисунок 10: модуль 4
Пишем скрипт, который ежедневно сохраняет в файл все ошибки из /var/log/syslog.
Рисунок 11: модуль 4
Натстраиваем cron, чтобы скрипт выполнялся раз в день.
Рисунок 12: модуль 4
Используем grep, чтобы посчитать количество неудачных попыток входа за последние 24 часа.
Создаем нового пользователя ivan и задаем ему пароль.
Создаем новую группу developers. Добавляем пользователя ivan в группу developers. Создаем группу testers и меняем принадлежность пользователя ivan группам c developers на testers. Удаляем учетную запись пользователя ivan вместе с его домашним каталогом.
Рисунок 15: модуль 5
Создаем где‑нибудь новый файл. Изучаем разрешения, которые он получил автоматически. Имеют именно такие значения из-за umask.
Для созданного файла убераем права на запись для группы и на чтение для всех остальных. Возвращаем первоначальные доступы файлу, используя числовую форму.
Рисунок 17: модуль 5
Делаем владельцем файла пользователя root.
Рисунок 18: модуль 5
Возвращаем себе владение файлом.
Рисунок 19: модуль 5
Выполняем несколько действий, используя sudo, и находим их в системном журнале.
Рисунок 20: модуль 5
Пользуемся учетной записью ivan из предыдущих уроков. Проверяем, может ли он выполнять команды суперпользователя. Если нет, предоставляем ему такую возможность.
Выводим имена всех пользователей, у которых в качестве алгоритма хеширования пароля указан устаревший SHA-512 (его префикс \(6\)).
Рисунок 22: модуль 5
Создаем пользователя ivan. Устанавливаем для него нужные параметры политики паролей с помощью команды chage. Блокируем вход пользователю ivan.
Рисунок 23: модуль 5
Убеждаемся, что он не может войти в систему.
Рисунок 24: модуль 5
Возрвращаем пользователю ivan возможность авторизоваться.
Рисунок 25: модуль 6
Проверяем права доступа к /etc/passwd, /home и /var/log.
Создаем файл в домашнем каталоге, проверяем его права и настройте umask, чтобы у новых файлов не было прав для категории остальных пользователей.
Создаем файл и настройте ему права 644, чтобы владелец мог редактировать, а остальные — только читать. Создаем группу admins, меняем группу у созданного файла в первом задании на эту и передаем группе право на изменение (запись).
Разрешаем конкретному пользователю изменять файл, не добавляя его в основную группу владельца. Утсанавливаем особые права для группы, чтобы она могла только выполнять файл. Проверяем и сбрасываем все ACL с файла.
Устанавливаем SUID на исполняемый файл, чтобы он запускался от имени владельца. Настраиваем SGID для каталога, чтобы новые файлы наследовали группу. Делаем так, чтобы категория других пользователей могли записывать в /public_folder, но не могли удалять чужие файлы.
Рисунок 30: модуль 7
Находим процесс, потребляющий больше всего памяти и завершаем его.
Рисунок 31: модуль 7
Запускаем процесс в фоновом режиме, возвращаем его на передний план, приостанавливаем процесс, затем возвращаем в фон.
Устанавилваем и запускаем htop, настраиваем нужные вам колонки, находим по фильтру процесс и «убиваем его».
Запускаем задачу у низким приоритетом — например, с nice=15. Находим PID процесса, который запускали ранее, и повышаем приоритет до -5. Находим процесс с самым низким приоритетом и пробуем повысить приоритет данного процесса.
Выводим список всех активных сервисов и фильтруем их по фильтру «Network». Определяем, какой веб-сервер установлен, проверяем статус сервиса и перезапускаем его. После перезапуска проверяем журнал на наличие ошибок.
Находим ненужный сервис. Делаем так, чтобы при перезапуске системы данный процесс не запускался. Перезагружаем устройство, на котором работаете, и проверяем, что выбранный сервис выключен.
Рисунок 37: модуль 7
Создаем простой Python-скрипт и даем данному файлу права на запуск.
Создаем unit-файл — активируем и проверяем статус вашего юнита.
Рисунок 39: модуль 7
Принудительно завершаем процесс, который был запущен в предыдущем задании, и проверяем статус сервиса.
Рисунок 40: модуль 7
Перезагружаем устройство, на котором работаем, и проверяем, сработал ли автозапуск вашего процесса.
Когда нам нужно получить полное и структурированное описание утилиты, ее опций и примеров использования, мы обращаемся к встроенному справочнику с помощью команды man Мы используем команду info как альтернативу man для просмотра более подробной документации. Мы знаем, что после установки пакета его дополнительная документация, лицензии и примеры конфигураций обычно размещаются в каталоге /usr/share/doc/имя_пакета.
Мы используем конструкцию cat > файл.txt для перенаправления стандартного ввода в новый файл. Мы применяем оператор >>, когда нужно добавить данные в конец существующего файла, не стирая его предыдущее содержимое. Оператор > всегда создает файл заново или полностью перезаписывает существующий. Для просмотра больших файлов мы предпочитаем использовать less, так как он позволяет нам листать содержимое страницами, искать по тексту и свободно перемещаться по файлу, в то время как cat вываливает всё содержимое сразу, что неудобно для навигации.
Для выхода из просмотрщика less мы просто нажимаем клавишу q. В редакторе Vim, находясь в Normal mode, мы нажимаем клавишу :, чтобы перейти в Command mode.
Мы обращаемся к каталогу /var/log/, так как он является стандартным местом хранения логов системы и приложений. Мы используем эту команду, чтобы отфильтровать и просмотреть все записи журнала systemd, относящиеся к службе sshd, начиная с начала текущих суток. Чтобы увидеть ограниченное количество последних записей, мы используем ключ -n. Команда journalctl -n 20 выведет последние 20 строк журнала.
Для наблюдения за растущим лог-файлом в реальном времени мы используем команду tail с ключом -f. Мы знаем, что индивидуальные задания планировщика cron для каждого пользователя хранятся в виде файлов в каталоге /var/spool/cron/
В записи cron мы используем символ звездочки * для обозначения “каждого” допустимого значения в поле (например, каждую минуту, каждый час). Чтобы полностью очистить нашу личную таблицу cron, мы выполняем команду crontab -r.
При создании пользователя мы используем ключ -m, чтобы система автоматически создала для него домашний каталог по умолчанию. Для полного удаления учетной записи пользователя и его домашнего каталога со всем содержимым мы применяем команду userdel с ключом -r
Мы используем эту команду, чтобы предоставить пользователю admin права суперпользователя. Ключ -aG гарантирует, что пользователь будет добавлен в группу sudo, а не будет перемещен туда, потеряв все другие групповые членства. Для редактирования критичных системных файлов /etc/passwd и /etc/shadow мы используем специальную утилиту vipw. Она блокирует файл на время редактирования, предотвращая его одновременное изменение из другого места, что обеспечивает целостность данных.
Первый символ в выводе ls -l указывает на тип файла. Буква d означает, что это каталог. Мы используем команду chown в формате “chown владелец:группа файл” для одновременного изменения владельца и группы файла. Мы расшифровываем числовой формат прав так: 7 (владелец: rwx), 5 (группа: r-x), 4 (остальные: r–). Это соответствует строке rwxr-xr–.
Все команды, выполненные через sudo, записываются в системный журнал, что позволяет нам отслеживать, кто, когда и что делал с привилегиями root. После изменения порта SSH демон будет работать на новом порту, но межсетевой экран по умолчанию блокирует все входящие соединения, кроме разрешенных правилами.
Чтобы разрешить входящие подключения к нестандартному порту SSH, мы добавляем в UFW правило, явно указывающее номер порта и протокол: sudo ufw allow 47022/tcp. Мы предпочитаем sudo, потому что он позволяет предоставлять привилегированный доступ без разглашения пароля root, обеспечивает детальное логирование действий и дает более гибкое управление правами через файл /etc/sudoers.
Мы понимаем, что хеширование — это односторонняя криптографическая функция. Идентификатор алгоритма хеширования, такой как \(6\) (SHA-512) или \(y\) (yescrypt), указывает системе, какой метод использовался для создания этого хеша. Мы добавляем “соль” — случайную строку — к паролю перед хешированием. Это гарантирует, что даже одинаковые пароли будут иметь разные хеши.
Чтобы проверить настройки политики паролей, мы используем команду chage с ключом -l. Команда usermod -L блокирует учетную запись пользователя, добавляя знак ! в начало его хешированного пароля в /etc/shadow, что делает невозможным вход в систему с этим паролем.
Для просмотра подробного списка файлов, включая их права доступа, владельца и группу, мы используем команду ls -l. Комбинация флагов -l и -a в команде ls позволяет нам увидеть права доступа у всех файлов, включая скрытые. Мы переводим символьные права в числовые: r (read) = 4, w (write) = 2, - (no execute) = 0. Суммируем: 4 + 2 + 0 = 6.
Для изменения прав доступа мы используем команду chmod. В символьном режиме команды chmod мы используем операторы: + для добавления прав, - для отзыва прав и = для установки прав в точное значение. Чтобы рекурсивно применить изменения прав ко всем файлам и подкаталогам внутри директории, мы используем ключ -R.
Мы устанавливаем Sticky Bit на общедоступные каталоги вроде /tmp, чтобы пользователи могли удалять только свои собственные файлы, даже если у них есть право на запись в каталог. SUID — это специальное право, которое заставляет исполняемый файл запускаться с правами его владельца, а не пользователя, который его запустил. Такого параметра не существует.
Для получения подробного списка всех процессов в системе с информацией о пользователе, PID, использовании CPU и памяти мы используем команду ps aux. Когда процесс не реагирует на другие сигналы, мы используем команду kill -9, которая отправляет сигнал SIGKILL. Мы приостанавливаем процесс, работающий в терминале, нажатием Ctrl+Z. Затем, чтобы возобновить его выполнение в фоновом режиме, мы вводим команду bg %1.
Значение nice определяет приоритет планировщика. Чем оно ниже, тем выше приоритет процесса. Таким образом, значение -20 является наивысшим приоритетом, а 19 — самым низким. Для изменения приоритета уже работающего процесса мы используем команду renice. В unit-файле systemd мы используем директиву Nice=, чтобы установить значение nice для всех процессов этого сервиса при их запуске.
Для проверки состояния, активности и последних логов системного сервиса мы используем команду systemctl status имя_сервиса. В таймере systemd мы используем директиву OnCalendar= с параметром daily, чтобы настроить ежедневный запуск в полночь. Чтобы сервис автоматически запускался при загрузке системы, мы “включаем” его с помощью команды systemctl enable. Это создает необходимые символические ссылки.
Мы используем директиву Restart=always в unit-файле systemd, когда нам нужно, чтобы сервис автоматически перезапускался независимо от того, как он завершился — штатно, с ошибкой или был принудительно остановлен. Это обеспечивает максимальную отказоустойчивость службы. Для мониторинга журнала конкретного сервиса в реальном времени мы используем команду journalctl -u servicename -f. Перед тем как запускать новый сервис, мы всегда проверяем его unit-файл на наличие синтаксических ошибок с помощью команды systemd-analyze verify.
Рисунок 61: тест 1
Рисунок 62: тест 2
Рисунок 63: тест 3
Рисунок 64: тест 4
Рисунок 65: тест 5
Рисунок 66: тест 6
Рисунок 67: тест 7
Рисунок 68: тест 8
Рисунок 69: тест 9
Рисунок 70: тест 10
Рисунок 71: тест 11
Рисунок 72: тест 12
Рисунок 73: тест 13
Рисунок 74: тест 14
Рисунок 75: тест 15
Мы выполнили второй раздел внешнего курса “Системный администратор Linux с нуля”.